package logic

import (
	"2103A-server/user/internal/svc"
	"2103A-server/user/user"
	"context"
	"crypto/md5"
	"encoding/hex"
	"fmt"
	"google.golang.org/grpc/status"
	"net/http"

	"github.com/zeromicro/go-zero/core/logx"
)

type LoginLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic {
	return &LoginLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// 定义请求的方法
func (l *LoginLogic) Login(in *user.LoginRequest) (*user.Response, error) {
	// todo: add your logic here and delete this line
	//查询数据
	// 获取请求的参数
	mobile := in.Mobile     // 获取请求体中的参数
	password := in.Password //获取请求体中的密码
	fmt.Println(mobile)
	fmt.Println(password)

	// 验证手机号、密码
	if len(mobile) == 0 {
		return nil, status.Error(http.StatusUnauthorized, "手机号不能为空")
	}

	if len(password) == 0 {
		return nil, status.Error(http.StatusUnauthorized, "密码不能为空")
	}
	// 查询数据、rpc怎么使用model 数据库连接，格式{{username}}:{{password}}@tcp({{host_port}})/{{db}}
	//goctl model mysql datasource -url="root:password@tcp(127.0.0.1:3306)/2103A" -t="user"
	// 怎么连接数据？

	//查询数据
	res, err := l.svcCtx.UserModel.FindOneByMobile(l.ctx, mobile)
	// 判断返回结果
	if err != nil {
		fmt.Println(err.Error())
		return nil, status.Error(http.StatusNotFound, "手机不存在")
	}
	//fmt.Println(res)

	// 密码md5加密
	originPassword := []byte(password)
	md5Password := md5.Sum(originPassword)
	strPassword := hex.EncodeToString(md5Password[:]) //加密后的密码

	//验证密码是否正确
	if res.Password != strPassword {
		return nil, status.Error(http.StatusNotFound, "密码不正确")
	}

	return &user.Response{
		Code:   http.StatusOK,
		Msg:    "Login successfully====" + strPassword,
		Id:     res.Id,
		Mobile: res.Mobile,
	}, nil
}
